import axios from 'axios';
const ZHIPU_CONFIG = {
  apiKey: "e0eb3e4d095a4102aabfb9eaa11c7dda.0QfyKlrcnHcwWUPt",
  appId: "1948189406628364288"
};
export default {
  data() {
    const today = new Date().toISOString().split('T')[0];
    return {
      form: {
        companyName: '', // 企业名称，必填
        companyCode: '', // 统一社会信用代码，必填
        registerAddress: '', // 企业注册地址，必填
        businessAddress: '', // 主要经营地址
        industry: '', // 所属行业，必填
        companySize: '', // 企业规模，必填
        companyWebsite: '', // 企业官网/主要产品介绍链接
        contactName: '', // 联系人姓名，必填
        contactPosition: '', // 联系人职务，必填
        contactPhone: '', // 联系电话，必填
        contactEmail: '', // 电子邮箱，必填
        infoType: '', // 信息类型（demand/supply），必填
        demandType: [], // 需求类别（数组，提交时转字符串）
        demandDescription: '', // 需求描述
        demandCooperation: '', // 期望合作模式
        demandBudget: '', // 预算范围/可接受价格
        demandUrgency: '', // 需求紧迫性
        demandRegion: '', // 期望合作地域
        supplyType: [], // 供应类别（数组，提交时转字符串）
        supplyDescription: '', // 核心产品/服务/能力描述
        supplyAdvantage: '', // 主要优势/核心竞争力
        supplyCooperation: '', // 可接受的合作模式
        supplyPrice: '', // 定价参考/报价依据
        supplyRegion: '', // 可服务地域
        preferCompany: '', // 期望匹配的企业类型/规模
        additionalInfo: '', // 其他特殊要求或说明
        expiryDate: '', // 信息有效期至
        receiveMethod: [], // 信息接收方式（数组，提交时转字符串）
        declaration1: false, // 声明1，必填
        declaration2: false, // 声明2，必填
        declaration3: false, // 声明3，必填
        submitDate: today // 提交日期，必填
      },
      demandTypeOptions: [
        { value: 'material', label: '原材料/零部件/设备采购' },
        { value: 'production', label: '生产加工/代工服务' },
        { value: 'tech', label: '技术/研发合作' },
        { value: 'talent', label: '人才招聘/专业服务' },
        { value: 'sales', label: '销售渠道/市场拓展' },
        { value: 'finance', label: '融资/投资需求' },
        { value: 'space', label: '场地/空间需求' },
        { value: 'logistics', label: '物流/仓储服务' },
        { value: 'other', label: '其他需求' },
      ],
      supplyTypeOptions: [
        { value: 'material', label: '原材料/零部件/设备销售' },
        { value: 'production', label: '生产加工/制造能力' },
        { value: 'tech', label: '技术/解决方案/专利授权' },
        { value: 'service', label: '专业人才/服务提供' },
        { value: 'sales', label: '销售渠道/代理能力' },
        { value: 'investment', label: '投资/资金提供' },
        { value: 'space', label: '场地/空间出租/出售' },
        { value: 'logistics', label: '物流/仓储服务' },
        { value: 'other', label: '其他优势资源/服务' },
      ],
      popup: {
        visible: false,
        title: '',
        message: '',
        iconClass: '',
        btnClass: '',
      },
      zhipuReply: '', // 智谱API回复内容
      loadingZhipu: false,
      // 新增：工商信息查询相关
      companySearchList: [],
      companySearchLoading: false,
      companySearchKeyword: '',
      showCompanyDropdown: false,
      showZhipuModal: false, // AI回复弹窗显示状态
      copySuccess: false, // 复制成功状态
    };
  },
  methods: {
    selectInfoType(type) {
      this.form.infoType = type;
    },
    handleSubmit() {
      if (!this.form.infoType) {
        this.showPopup('请选择信息类型（我有需求或我有供应）', 'error');
        return;
      }
      if (!this.validateForm()) {
        return;
      }
      this.submitToServer();
    },
    validateForm() {
      // 基本必填校验
      const requiredFields = [
        'companyName', 'companyCode', 'registerAddress', 'industry', 'companySize',
        'contactName', 'contactPosition', 'contactPhone', 'contactEmail',
        'declaration1', 'declaration2', 'declaration3', 'submitDate'
      ];
      for (const key of requiredFields) {
        if (!this.form[key] || (typeof this.form[key] === 'string' && !this.form[key].trim())) {
          this.showPopup('请填写所有必填项（标有*的字段）', 'error');
          return false;
        }
      }
      // 信息类型特定校验
      if (this.form.infoType === 'demand') {
        if (!this.form.demandType.length) {
          this.showPopup('请至少选择一种需求类别', 'error');
          return false;
        }
        if (!this.form.demandDescription.trim()) {
          this.showPopup('需求描述为必填项', 'error');
          return false;
        }
      }
      if (this.form.infoType === 'supply') {
        if (!this.form.supplyType.length) {
          this.showPopup('请至少选择一种供应类别', 'error');
          return false;
        }
        if (!this.form.supplyDescription.trim()) {
          this.showPopup('核心产品/服务/能力描述为必填项', 'error');
          return false;
        }
        if (!this.form.supplyAdvantage.trim()) {
          this.showPopup('主要优势/核心竞争力为必填项', 'error');
          return false;
        }
      }
      return true;
    },
    showPopup(message, type = 'info') {
      let iconClass = 'fas fa-info-circle popup-icon info';
      let title = '提示';
      let btnClass = 'primary';
      if (type === 'success') {
        iconClass = 'fas fa-check-circle popup-icon success';
        title = '成功';
        btnClass = 'success';
      } else if (type === 'error') {
        iconClass = 'fas fa-exclamation-circle popup-icon error';
        title = '错误';
        btnClass = 'error';
      }
      this.popup = {
        visible: true,
        title,
        message,
        iconClass,
        btnClass,
      };
    },
    closePopup() {
      this.popup.visible = false;
    },
    copyZhipuReply() {
      if (!this.zhipuReply) return;
      
      // 创建一个临时元素来获取纯文本内容
      const tempDiv = document.createElement('div');
      tempDiv.innerHTML = this.zhipuReply;
      const textContent = tempDiv.textContent || tempDiv.innerText || '';
      
      // 使用现代浏览器的 Clipboard API
      if (navigator.clipboard && window.isSecureContext) {
        navigator.clipboard.writeText(textContent).then(() => {
          this.copySuccess = true;
          setTimeout(() => {
            this.copySuccess = false;
          }, 2000);
        }).catch(err => {
          console.error('复制失败:', err);
          this.fallbackCopyTextToClipboard(textContent);
        });
      } else {
        // 降级方案
        this.fallbackCopyTextToClipboard(textContent);
      }
    },
    fallbackCopyTextToClipboard(text) {
      const textArea = document.createElement('textarea');
      textArea.value = text;
      textArea.style.position = 'fixed';
      textArea.style.left = '-999999px';
      textArea.style.top = '-999999px';
      document.body.appendChild(textArea);
      textArea.focus();
      textArea.select();
      
      try {
        const successful = document.execCommand('copy');
        if (successful) {
          this.copySuccess = true;
          setTimeout(() => {
            this.copySuccess = false;
          }, 2000);
        } else {
          this.showPopup('复制失败，请手动复制', 'error');
        }
      } catch (err) {
        console.error('复制失败:', err);
        this.showPopup('复制失败，请手动复制', 'error');
      }
      
      document.body.removeChild(textArea);
    },
    async submitToServer() {
      try {
        // 构造 payload，demandType/supplyType 以 work.txt 方式展开为布尔字段
        const demandTypeMap = {
          material: 'demandTypeMaterial',
          production: 'demandTypeProduction',
          tech: 'demandTypeTech',
          talent: 'demandTypeTalent',
          sales: 'demandTypeSales',
          finance: 'demandTypeFinance',
          space: 'demandTypeSpace',
          logistics: 'demandTypeLogistics',
          other: 'demandTypeOther'
        };
        const supplyTypeMap = {
          material: 'supplyTypeMaterial',
          production: 'supplyTypeProduction',
          tech: 'supplyTypeTech',
          service: 'supplyTypeService',
          sales: 'supplyTypeSales',
          investment: 'supplyTypeInvestment',
          space: 'supplyTypeSpace',
          logistics: 'supplyTypeLogistics',
          other: 'supplyTypeOther'
        };
        const {
          companyName, companyCode, registerAddress, businessAddress, industry, companySize, companyWebsite,
          contactName, contactPosition, contactPhone, contactEmail, infoType,
          demandDescription, demandCooperation, demandBudget, demandUrgency, demandRegion,
          supplyDescription, supplyAdvantage, supplyCooperation, supplyPrice, supplyRegion,
          preferCompany, additionalInfo, expiryDate, receiveMethod,
          declaration1, declaration2, declaration3, submitDate
        } = this.form;
        const payload = {
          // 新增 answer 字段，保存AI回复内容，放在最前面，防止被后续展开覆盖
          answer: this.zhipuReply || '',
          companyName, companyCode, registerAddress, businessAddress, industry, companySize, companyWebsite,
          contactName, contactPosition, contactPhone, contactEmail, infoType,
          demandDescription, demandCooperation, demandBudget, demandUrgency, demandRegion,
          supplyDescription, supplyAdvantage, supplyCooperation, supplyPrice, supplyRegion,
          preferCompany, additionalInfo, expiryDate,
          receiveMethod: receiveMethod.join(','),
          declaration1, declaration2, declaration3, submitDate,
          // 展开需求类别
          ...Object.fromEntries(Object.entries(demandTypeMap).map(([k, v]) => [v, this.form.demandType.includes(k)])),
          // 展开供应类别
          ...Object.fromEntries(Object.entries(supplyTypeMap).map(([k, v]) => [v, this.form.supplyType.includes(k)])),
        };
        console.log('提交payload:', payload);
        const response = await axios.post('https://imdapi.xinmandiao.com/v1/api/enterprise/submit', payload);
        if (response.data && response.data.status === 10000) {
          // 提交成功，不显示弹窗，让AI智能回复对话框继续处理
          this.handleReset();
        } else {
          // 优先展示 details 字段
          throw new Error(response.data.details || response.data.msg || '服务器返回错误');
        }
      } catch (error) {
        throw new Error(`提交失败：${error.message || '服务器连接错误'}。请稍后重试或联系技术支持。`);
      }
    },
    handleReset() {
      const today = new Date().toISOString().split('T')[0];
      this.form = {
        companyName: '',
        companyCode: '',
        registerAddress: '',
        businessAddress: '',
        industry: '',
        companySize: '',
        companyWebsite: '',
        contactName: '',
        contactPosition: '',
        contactPhone: '',
        contactEmail: '',
        infoType: '',
        demandType: [],
        demandDescription: '',
        demandCooperation: '',
        demandBudget: '',
        demandUrgency: '',
        demandRegion: '',
        supplyType: [],
        supplyDescription: '',
        supplyAdvantage: '',
        supplyCooperation: '',
        supplyPrice: '',
        supplyRegion: '',
        preferCompany: '',
        additionalInfo: '',
        expiryDate: '',
        receiveMethod: [],
        declaration1: false,
        declaration2: false,
        declaration3: false,
        submitDate: today
      };
    },
    async getAllEnterpriseInfo() {
      try {
        let allData = [];
        let current = 1; // 注意：参数名改为 current 而非 page
        const size = 10; // 参数名改为 size 而非 pageSize
    
        while (true) {
          const res = await axios.get('https://imdapi.xinmandiao.com/v1/api/enterprise/list', {
            params: { current, size } // 关键修改：参数名对齐后端
          });
    
          // 调试：打印请求URL和响应
          console.log(`请求参数: current=${current}, size=${size}`);
          console.log('响应数据:', res.data);
    
          if (!res.data?.data?.content?.length) break;
    
          allData = [...allData, ...res.data.data.content];
    
          // 根据总记录数终止循环
          if (res.data.data.totalElements && allData.length >= res.data.data.totalElements) {
            console.log(`已获取全部 ${res.data.data.totalElements} 条数据`);
            break;
          }
    
          current++; // 递增页码
    
          // 安全限制（防止意外无限循环）
          if (current > 20) {
            console.warn('警告：已请求超过20页，强制终止');
            break;
          }
        }
    
        return allData;
      } catch (e) {
        console.error('请求失败:', e);
        this.showPopup('获取数据失败: ' + (e.message || '网络错误'), 'error');
        return [];
      }
    },
    async handleZhipuProcess() {
      const allInfo = await this.getAllEnterpriseInfo();
      if (allInfo.length === 0) return;
      const latest = allInfo[0];
      await this.callZhipuAPI({ latest, all: allInfo });
    },
    async handleSubmitAndReply() {
      if (!this.form.infoType) {
        this.showPopup('请选择信息类型（我有需求或我有供应）', 'error');
        return;
      }
      if (!this.validateForm()) {
        return;
      }
      this.loadingZhipu = true;
      this.showZhipuModal = true; // 立即显示弹窗和加载状态
      this.zhipuReply = ''; // 清空之前的回复内容
      try {
        // 1. 获取所有企业信息
        let allInfo;
        try {
          const res = await axios.get('https://imdapi.xinmandiao.com/v1/api/enterprise/list', { 
            params: { current: 1, size: 1000 } 
          });
          if (res.data && res.data.data && res.data.data.content && res.data.data.content.length > 0) {
            allInfo = res.data.data.content;
          } else {
            this.zhipuReply = '<span style="color:#e67e22;font-weight:bold">未获取到企业信息，无法进行智能分析。</span>';
            return;
          }
        } catch (e) {
          this.zhipuReply = '<span style="color:#e67e22;font-weight:bold">获取企业信息失败: ' + (e.message || '网络错误') + '</span>';
          return;
        }
        const latest = allInfo[0];
        // 2. 供需方向过滤（不再要求行业匹配）
        const oppositeType = latest.infoType === 'supply' ? 'demand' : 'supply';
        const filtered = allInfo.filter(item => item.infoType === oppositeType);
        if (filtered.length === 0) {
          this.zhipuReply = '<span style="color:#e67e22;font-weight:bold">未找到合适的企业，无法推荐。</span>';
          return;
        }
        // 3. 智能回复（只传递行业完全一致且类型相反的企业）
        await this.callZhipuAPI({ latest, all: filtered });
        // 4. 高亮公司名称
        if (latest.companyName && this.zhipuReply) {
          const reg = new RegExp(latest.companyName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
          this.zhipuReply = this.zhipuReply.replace(reg, '<span style="color:#e67e22;font-weight:bold">' + latest.companyName + '</span>');
        }
        // 替换AI回复中的**加粗**为<b>加粗</b>，去除星号
        if (this.zhipuReply) {
          this.zhipuReply = this.zhipuReply.replace(/\*\*(.*?)\*\*/g, '<b>$1</b>');
        }
        // 5. 提交表单，answer 字段为 AI 回复内容
        await this.submitToServer();
      } finally {
        this.loadingZhipu = false;
      }
    },
    async callZhipuAPI(infoObj) {
      try {
        const prompt = `根据您提供的信息（${infoObj.latest.companyName}），${infoObj.latest.companyName ? `该企业属于${infoObj.latest.industry || '未知行业'}，` : ''}请严格遵循根据以下规则进行推荐：\n\n【重要警告】\n1. 【严禁幻觉】只能推荐以下提供的真实企业信息中的企业，绝对不允许虚构、编造或推荐任何不在提供列表中的企业。\n2. 【严格限制】如果提供的企业信息中没有合适的企业，请明确说明"未找到合适的企业"，不要推荐任何虚假企业。\n\n1. 信息解析规则：\n- 首先识别用户信息类型："需求方"（需要资源/服务）或"供应方"（提供资源/服务）\n- 提取核心信息：企业规模、具体需求/供应类别、需求描述/供应描述、合作偏好、地域范围等关键要素\n- 严格限制：只能从提供的企业列表中选择，不得推荐任何其他企业\n\n2. 匹配逻辑：\n- 若用户为"需求方"，仅推荐"供应方"企业，且供应类别需与需求类别高度匹配，供应描述需与需求描述内容相关\n- 若用户为"供应方"，仅推荐"需求方"企业，且需求类别需与供应类别高度匹配，需求描述需与供应描述内容相关\n- 优先匹配需求描述与供应描述内容高度相关的企业\n- 同等条件下优先考虑规模匹配的企业（如中小企业优先匹配中小企业）\n- 【关键限制】只能推荐提供的企业列表中的真实企业\n\n3. 推荐输出格式（严格遵守，不得省略）：\n- 推荐数量：最多3-5家最合适的企业（如果合适的企业少于3家，按实际数量推荐）\n- 每家企业推荐必须包含：\n  * 企业名称：必须使用提供的企业列表中的完整企业名称，不得修改、简写或虚构\n  * 所属行业：明确标注具体行业分类\n  * 匹配要点：1-2句完整句子，清晰说明供需匹配的具体逻辑，重点说明需求描述与供应描述的匹配关系\n  * 核心优势：完整描述企业核心竞争力，不低于15字\n  * 推荐指数：明确给出1-10分的具体分数（格式：推荐指数：X分）\n  * 联系方式：显示联系电话、电子邮箱等联系信息\n- 最后提供1-2句合作建议：基于双方供需特点给出具体可行的建议，不低于20字\n\n4. 内容质量要求：\n- 所有推荐内容必须语句完整，避免缺字、吞字或语句截断\n- 匹配要点需紧密结合用户需求描述与推荐企业的供应描述\n- 核心优势需具体、有针对性，避免空泛描述\n- 【绝对禁止】不得推荐任何不在提供列表中的企业\n\n5. 处理示例：\n当收到"需求方-需要电子元器件采购"的信息时，应推荐"供应方-电子元件生产"类企业，输出格式如下：\n1. **XX电子元件有限公司（电子制造行业）**\n   - **匹配要点**：专注于电子元器件生产，供应描述与您的电子元器件采购需求高度匹配\n   - **核心优势**：拥有完整的生产线和质量管控体系，可提供稳定的元器件供应\n   - **推荐指数**：9分\n   - **联系方式**：📞 13800138000 | 📧 zhangsan@company.com\n\n【企业信息列表】\n以下是您可以推荐的真实企业信息，请严格只从这些企业中选择：\n${infoObj.all.map((company, index) => `${index + 1}. 企业名称：${company.companyName || '未知'}，行业：${company.industry || '未知'}，类型：${company.infoType || '未知'}，需求描述：${company.demandDescription || '无'}，供应描述：${company.supplyDescription || '无'}，联系人：${company.contactName || '未知'}，联系电话：${company.contactPhone || '未知'}，电子邮箱：${company.contactEmail || '未知'}`).join('\n')}\n\n请基于用户提供的完整企业信息，严格按照上述规则进行匹配推荐。记住：只能推荐上述列表中的真实企业，绝对不允许推荐任何其他企业。如果列表中没有合适的企业，请明确说明"未找到合适的企业"。\n\n【最新一条企业信息】\n${JSON.stringify(infoObj.latest, null, 2)}\n`;
        const resp = await axios.post(
          'https://open.bigmodel.cn/api/paas/v4/chat/completions',
          {
            model: 'glm-4',
            messages: [
              { role: 'system', content: '你是一个企业供需撮合的智能助手。' },
              { role: 'user', content: prompt }
            ],
            stream: false,
            app_id: ZHIPU_CONFIG.appId
          },
          {
            headers: {
              'Authorization': `Bearer ${ZHIPU_CONFIG.apiKey}`,
              'Content-Type': 'application/json'
            }
          }
        );
        if (resp.data && resp.data.choices && resp.data.choices.length > 0) {
          this.zhipuReply = resp.data.choices[0].message.content;
        } else {
          this.zhipuReply = '未获得有效回复';
        }
      } catch (e) {
        this.zhipuReply = '智谱API调用失败: ' + (e.message || '网络错误');
      } finally {
        this.loadingZhipu = false;
      }
    },
    /**
     * 查询工商信息（模糊搜索企业）
     */
    async searchCompany() {
      if (!this.companySearchKeyword || !this.companySearchKeyword.trim()) {
        this.showPopup('请输入企业名称进行查询', 'error');
        return;
      }
      this.companySearchLoading = true;
      this.showCompanyDropdown = false;
      this.companySearchList = [];
      try {
        const res = await axios.get('https://imdapi.xinmandiao.com/v1/api/qcc/corp/qccSearch', {
          params: {
            privateKey: 'cnEKt6PQmbSNNfJsjJ5V',
            entName: this.companySearchKeyword.trim(),
          }
        });
        if (res.data && res.data.status === 10000 && Array.isArray(res.data.data) && res.data.data.length) {
          this.companySearchList = res.data.data;
          this.showCompanyDropdown = true;
        } else {
          this.showPopup('未查询到相关企业', 'info');
        }
      } catch (e) {
        this.showPopup('工商信息查询失败: ' + (e.message || '网络错误'), 'error');
      } finally {
        this.companySearchLoading = false;
      }
    },
    /**
     * 选择企业后自动填充表单
     */
    handleSelectCompany(item) {
      this.form.companyName = item.entName || item.name || '';
      this.form.companyCode = item.creditCode || item.unifiedSocialCreditCode || '';
      this.form.registerAddress = item.regLocation || item.address || '';
      this.showCompanyDropdown = false;
    },
  },
  mounted() {
    // 自动设置提交日期为今天
    this.form.submitDate = new Date().toISOString().split('T')[0];
  },

};